[NET] front: Fix crashes when xenstore watches fire multiple times.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Thu, 14 Dec 2006 12:21:28 +0000 (12:21 +0000)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Thu, 14 Dec 2006 12:21:28 +0000 (12:21 +0000)
Signed-off-by: Keir Fraser <keir@xensource.com>
linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c

index da22d45bf6714ede6e97d7cb467aa9ae9c3ee5e7..0e585475de9e4d195adf6732b1b066feffd05443 100644 (file)
@@ -525,6 +525,8 @@ static void backend_changed(struct xenbus_device *dev,
                break;
 
        case XenbusStateInitWait:
+               if (dev->state != XenbusStateInitialising)
+                       break;
                if (network_connect(netdev) != 0)
                        break;
                xenbus_switch_state(dev, XenbusStateConnected);
@@ -532,6 +534,8 @@ static void backend_changed(struct xenbus_device *dev,
                break;
 
        case XenbusStateClosing:
+               if (dev->state == XenbusStateClosed)
+                       break;
                netfront_closing(dev);
                break;
        }
index 5320368443316c74db1723c61db04e2baff193f7..5dc62457dbb794aa68dedaf52f5388655bfba4b6 100644 (file)
@@ -487,6 +487,8 @@ int xenbus_probe_node(struct xen_bus_type *bus,
        if (!xendev)
                return -ENOMEM;
 
+       xendev->state = XenbusStateInitialising;
+
        /* Copy the strings into the extra space. */
 
        tmpstring = (char *)(xendev + 1);